import request from '../utils/request';
import type { LoginParams, LoginResponse } from './types';

export interface MemberLevel {
  levelName: string
  totalPoints: number
  remainingPoints: number
  privileges: Privilege[]
}

export interface Privilege {
  name: string
  description: string
}

export const getMemberLevel = () => {
  return request<{ data: MemberLevel }>({
    url: '/member/level',
    method: 'GET'
  })
}


/**
 * 用户相关接口
 */
export default {
  /**
   * 用户登录
   * @param data 登录参数
   */
  login(data: LoginParams) {
    return request.post<LoginResponse>('/api/user/login', data);
  },

  /**
   * 短信登录
   * @param params 短信登录参数
   */
  loginBySms(params: SmsLoginParams) {
    return request.post<LoginResponse>('/api/user/loginBySms', params);
  },

  /**
   * 用户登出
   */
  logout() {
    return request.post('/api/user/logout');
  },

  /**
   * 获取用户信息
   */
  getUserInfo() {
    return request.get('/api/user/info');
  },

  /**
   * 更新用户信息
   * @param data 用户信息
   */
  updateUserInfo(data: Partial<LoginResponse['userInfo']>) {
    return request.put('/api/user/info', data);
  },

  /**
   * 修改密码
   * @param data 密码信息
   */
  updatePassword(data: { oldPassword: string; newPassword: string }) {
    return request.put('/api/user/password', data);
  },

  /**
   * 上传头像
   * @param file 文件对象
   */
  uploadAvatar(file: File) {
    const formData = new FormData();
    formData.append('file', file);
    return request.post('/api/user/avatar', formData, {
      header: {
        'Content-Type': 'multipart/form-data',
      },
    });
  },

  /**
   * 获取用户收货地址列表
   */
  getAddressList() {
    return request.get('/api/user/address/list');
  },

  /**
   * 添加收货地址
   * @param data 地址信息
   */
  addAddress(data: {
    name: string;
    phone: string;
    province: string;
    city: string;
    district: string;
    detail: string;
    isDefault?: boolean;
  }) {
    return request.post('/api/user/address', data);
  },

  /**
   * 更新收货地址
   * @param id 地址ID
   * @param data 地址信息
   */
  updateAddress(id: string | number, data: {
    name?: string;
    phone?: string;
    province?: string;
    city?: string;
    district?: string;
    detail?: string;
    isDefault?: boolean;
  }) {
    return request.put(`/api/user/address/${id}`, data);
  },

  /**
   * 获取优惠券列表
   * @param params 查询参数
   */
  getCouponList(params?: { status?: string }) {
    return request.get('/api/user/coupon/list', { params });
  },

  /**
   * 兑换优惠券
   * @param code 优惠券码
   */
  exchangeCoupon(code: string) {
    return request.post('/api/user/coupon/exchange', { code });
  },

  /**
   * 获取可用优惠券列表
   * @param params 查询参数
   */
  getAvailableCoupons(params: { amount: number, categoryId?: string }) {
    return request.get('/api/user/coupon/available', { params });
  },

  /**
   * 合成优惠券
   * @param couponIds 要合成的优惠券ID数组
   */
  mergeCoupons(couponIds: (string | number)[]) {
    return request.post('/api/user/coupon/merge', { couponIds });
  },

  /**
   * 删除收货地址
   * @param id 地址ID
   */
  deleteAddress(id: string | number) {
    return request.delete(`/api/user/address/${id}`);
  },

  /**
   * 设置默认收货地址
   * @param id 地址ID
   */
  setDefaultAddress(id: string | number) {
    return request.put(`/api/user/address/${id}/default`);
  },
};